package chapter01_Arr

/**
 * Created with IntelliJ IDEA.
 * ClassName: Test01_Array
 * Package: chapter01_Arr
 * Description:
 * User: fzykd
 *
 * @Author: LQH
 *          Date: 2023-07-12
 *          Time: 21:05
 */

object Test01_Array {

  //不可变数组
  //不可变数组 只的是 内存大小和 引用对象的地址是不可变的
  //所以数组元素 不可以删除 和 新增 涉及到内存空间的变化
  //可以修改和访问
  def main(args: Array[String]): Unit = {
    //不可变数组
    //new方式的常见 参数是一个数组的大小 内型可以省略 会 自动推断
    val arr: Array[Int] = new Array[Int](10) //表示数组的大小 确定之后不在变化

    //使用伴生对象 创建数组
    val arr2 = Array(1, 2, 3, 4, 5)
    //这个数组底层是继承了 java.io 所以不能直接输出
    println(arr2)
    println(arr2.mkString(","))

    //遍历
    //1.普通遍历 until 前闭后开
    for (i <- 0 until arr2.length) {
      println(i)
    }

    //函数 indices 是封装好的 0 until arr2.length
    for (i <- arr2.indices) println(i)

    println("----for增强遍历----")
    //for增强遍历 也是参数 <- arr(数组)
    //一定要有参数 不能使用下划线
    for (elem <- arr2) {
      println(elem)
    }

    //3.迭代器
    println("-------------")
    //首先要获取迭代器对象 一特伪特
    val iterator = arr2.iterator
    //迭代器遍历 要判断下一位 true和 false使用while循环
    while (iterator.hasNext) {
      println(iterator.next())
    }

    //4.foreach 方法调用 参数是一个函数 lambda表达式
    arr2.foreach((elem: Int) => println(elem))
    //匿名函数的至简原则
    arr2.foreach(println)

    //转换成String 参数是一个连接符
    println(arr2.mkString("-"))

    //追加
    println("-----------------------")
    //不可变数组 对数组进行添加操作 生成一个新的数组
    //运算符添加 : 如果没有省略点 那么冒号 不存在前后位置对应的类型是什么
    //如果省略的了点 那么冒号就要靠近引用类型
    val newArr = arr2.:+(73)
    //点可以省略
    val newArr2 = newArr :+ (100)
    println(newArr2.mkString(","))

    //加在前面
    val newArr4 = newArr2 .+: (88)
    println(newArr4.mkString("--"))

    //追加在首
    val newArr3 = 99 +: newArr2
    println(newArr3.mkString(","))
    println(arr2(1))

    arr2(1) = 909
    println(arr2.mkString(","))




  }

}
